home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / PowerGloveInspector / Source / PGController.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  107 lines

  1.  
  2. #import "PGController.h"
  3. #import "PowerGlove.h"
  4.  
  5. /* Internal functions */
  6. void timedEntryHandler(DPSTimedEntry teNumber, double now, char *userData)
  7. {
  8.     id object = (id)userData;
  9.     [object getPowerGloveData];
  10. }
  11.  
  12. @implementation PGController
  13.  
  14. /* Action methods */
  15. - showInfoPanel:sender
  16. {
  17.     if (infoPanel == nil) {
  18.         if (![NXApp loadNibSection:"infopanel.nib" owner:self withNames:NO]) {
  19.         return nil;
  20.     }
  21.     }
  22.     [infoPanel makeKeyAndOrderFront:nil];
  23.     return self;
  24. }
  25.  
  26. - showPreferencesPanel:sender
  27. {
  28.     if (preferencesPanel == nil) {
  29.         if (![NXApp loadNibSection:"preferencespanel.nib" owner:self withNames:NO]) {
  30.         return nil;
  31.     }
  32.     /* Initialize sample delay settings */
  33.         [sampleDelaySlider setMinValue:(double)0.001];
  34.         [sampleDelaySlider setMaxValue:(double)0.5];
  35.         [sampleDelaySlider setFloatValue:sampleDelay];
  36.         [sampleDelayField setFloatValue:sampleDelay];
  37.     }
  38.     [preferencesPanel makeKeyAndOrderFront:nil];
  39.     return self;
  40. }
  41.  
  42. - setSampleDelay:sender
  43. {
  44.     sampleDelay = [sender floatValue];
  45.     [sampleDelayField setFloatValue:sampleDelay];
  46.     
  47.     /* Replace old timed entry with a new one */
  48.     if (powerGloveTE) {
  49.         DPSRemoveTimedEntry(powerGloveTE);
  50.     }
  51.     powerGloveTE = DPSAddTimedEntry(sampleDelay,
  52.                                    (DPSTimedEntryProc)timedEntryHandler,
  53.                    self, NX_BASETHRESHOLD);
  54.     return self;
  55. }
  56.  
  57. /* Misc. methods */
  58. - getPowerGloveData
  59. {
  60.     /* Update buttons */
  61.     [aButton setState:[powerGlove aPressed]];
  62.     [bButton setState:[powerGlove bPressed]];
  63.     [startButton setState:[powerGlove startPressed]];
  64.     [selectButton setState:[powerGlove selectPressed]];
  65.     [upButton setState:[powerGlove padUp]];
  66.     [downButton setState:[powerGlove padDown]];
  67.     [leftButton setState:[powerGlove padLeft]];
  68.     [rightButton setState:[powerGlove padRight]];
  69.  
  70.     /* Update finger value form fields */
  71.     [ringSlider setIntValue:[powerGlove ring]];
  72.     [middleSlider setIntValue:[powerGlove middle]];
  73.     [indexSlider setIntValue:[powerGlove index]];
  74.     [thumbSlider setIntValue:[powerGlove thumb]];
  75.         
  76.     /* Update position and rotation form fields */
  77.     [xField setIntValue:[powerGlove gloveX]];
  78.     [yField setIntValue:[powerGlove gloveY]];
  79.     [zField setIntValue:[powerGlove gloveZ]];
  80.     [rollField setIntValue:(int)[powerGlove gloveRot]*30];
  81.  
  82.     [powerGloveView display];
  83.     return self;
  84. }
  85.  
  86.  
  87. @end
  88.  
  89. /* Delegate methods */
  90. @implementation PGController(ApplicationDelegate)
  91.  
  92. - appDidInit:sender
  93. {
  94.     /* Initialize the PowerGlove */
  95.     [powerGlove init];
  96.     [powerGlove setxHyst:0 yHyst:0 zHyst:0];
  97.     
  98.     /* Set up timed entry to get glove data periodically */
  99.     sampleDelay = 0.1;
  100.     powerGloveTE = DPSAddTimedEntry(sampleDelay,
  101.                                    (DPSTimedEntryProc)timedEntryHandler,
  102.                    self, NX_BASETHRESHOLD);
  103.     return self;
  104. }
  105.  
  106. @end
  107.